package cn.ygh.bbo.system.bean;
import cn.ygh.bbo.common.annotation.Excel;
import cn.ygh.bbo.framerwork.core.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;

import java.util.*;
import lombok.Data;
import org.apache.commons.lang3.builder.*;
/**
* 描述：操作日志
* @author ygh
*/
@TableName("opretation_log")
@Data
public class OpretationLog extends BaseEntity {
    /*数据库字段——start*/
    /**
    * 序号
    */
    @Excel("序号")
    @TableId(type = IdType.AUTO)
    @TableField(value = "id")
    private Integer id;

    /**
    * 表名
    */
    @Excel("表名")
    @TableField(value = "table_name")
    private String tableName;

    /**
    * 表序号
    */
    @Excel("表序号")
    @TableField(value = "table_id")
    private String tableId;

    /**
    * 管理员序号
    */
    @Excel("管理员序号")
    @TableField(value = "admin_id")
    private Integer adminId;

    /**
    * 类型
    */
    @Excel("类型")
    @TableField(value = "type")
    private Integer type;

    /**
    * 操作地址
    */
    @Excel("操作地址")
    @TableField(value = "uri")
    private String uri;

    /**
    * 管理员ip
    */
    @Excel("管理员ip")
    @TableField(value = "ip")
    private String ip;

    /**
    * 请求数据
    */
    @Excel("请求数据")
    @TableField(value = "request_str")
    private String requestStr;

    /**
    * 响应数据
    */
    @Excel("响应数据")
    @TableField(value = "response_str")
    private String responseStr;

    /**
    * 创建时间
    */
    @Excel("创建时间")
    @TableField(value = "gmt_create")
    private Date gmtCreate;


    /*数据库字段——end*/

    /**
    * 默认值设置
    * @return
    */
    public OpretationLog def(){
        return this;
    }

     /*构造函数——start*/
    public OpretationLog() {
    }

    public OpretationLog(Integer id) {
        this.id=id;
    }

    /**
    *构造函数
    */
    public OpretationLog(String tableName,String tableId,Integer adminId,Integer type,String uri,String ip,String requestStr,String responseStr,Date gmtCreate) {
        this.tableName=tableName;
        this.tableId=tableId;
        this.adminId=adminId;
        this.type=type;
        this.uri=uri;
        this.ip=ip;
        this.requestStr=requestStr;
        this.responseStr=responseStr;
        this.gmtCreate=gmtCreate;
    }
    /*构造函数——end*/

    /*非数据库字段——start*/
    /**
    * 创建时间开始
    */
    @TableField(exist = false)
    private Date gmtCreateBeginValue;

    /**
    * 创建时间结束
    */
    @TableField(exist = false)
    private Date gmtCreateEndValue;

    /*非数据库字段——end*/

    /**
	 * Hash，同所有字段相加判断
	 */
	@Override
	public int hashCode() {
		if(getId()==null){
            return new HashCodeBuilder()
            .append(getTableName())
            .append(getTableId())
            .append(getAdminId())
            .append(getType())
            .append(getUri())
            .append(getIp())
            .append(getRequestStr())
            .append(getResponseStr())
            .append(getGmtCreate())
			.toHashCode();
        }
		return new HashCodeBuilder()
			.append(getId())
			.toHashCode();
	}
    /**
	 * 重写，对象是否相同，用ID来判断
	 */
	@Override
	public boolean equals(Object obj) {
		if(!(obj instanceof OpretationLog)) {
			return false;
		}
		if(this == obj) {
			return true;
		}
        OpretationLog other = (OpretationLog)obj;
		return new EqualsBuilder()
			.append(getId(),other.getId())
			.isEquals();
	}
	/**
	 * 转文本
	 */
	@Override
	public String toString() {
		return new ToStringBuilder(this,ToStringStyle.SHORT_PREFIX_STYLE)
			.append(super.toString())
            .append(",Id",getId())
            .append(",TableName",getTableName())
            .append(",TableId",getTableId())
            .append(",AdminId",getAdminId())
            .append(",Type",getType())
            .append(",Uri",getUri())
            .append(",Ip",getIp())
            .append(",RequestStr",getRequestStr())
            .append(",ResponseStr",getResponseStr())
            .append(",GmtCreate",getGmtCreate())
			.toString();

	}

/*
//精简构造 操作日志
OpretationLog opretationLog = new OpretationLog(
            tableName //表名
            ,tableId //表序号
            ,adminId //管理员序号
            ,type //类型
            ,uri //操作地址
            ,ip //管理员ip
            ,requestStr //请求数据
            ,responseStr //响应数据
            ,gmtCreate //创建时间
);
*/
}